knap sack problem java